// PROGRAMA : SISSM003
// BIBLIOTECA : PRODETR
// SISTEMA : INFORMACOES DE SEGURANCA PUBLICA - SISP
// CLIENTE : SEJUSP - SEC. DA JUSTICA E SEGURANCA PUBLICA
// INSTITUTO DE IDENTIFICACAO
// PROGRAMADOR : EDU/FM DATA: 15/07/94
// OBJETIVO : MONTA JANELAS DE OPCOES DE CONSULTA
// ATUALIZACOES DATA
// PROGRAMA : SISSM003 27/10/1997
// BIBLIOTECA : PRODETR
// PROGRAMADOR :
// OBJETIVO : ADAPTACAO PARA O SHOPPING DO CIDADAO (P200)
// OBS : ESTE PROGRAMA FOI REESTRUTURADO POR SOLON MIRANDA
package br.com.vti.sisp_sicrim.antigo.controller.programa;

import java.util.Arrays;

import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Sissm003A;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Sisthm01;
import br.com.vti.sisp_sicrim.antigo.model.SicOperacao;
import br.com.vti.sisp_sicrim.antigo.model.Sislm001;
import br.com.vti.sisp_sicrim.antigo.util.ExceptionProgram;
import br.com.vti.sisp_sicrim.antigo.util.Sessao;
import br.com.vti.sisp_sicrim.antigo.util.Sisgsisp;
import br.com.vti.sisp_sicrim.antigo.util.UtilBean;

/**
 * Classe : Sissm003 OBJETIVO : MONTA JANELAS DE OPCOES DE CONSULTA *
 * 
 * @author Incode - Data: mai/2014
 * 
 */
@Resource
@Path("/antigo/sissm003")
public class Sissm003 {
	// Views utilizadas
	SicOperacao vwDveope = new SicOperacao();
	// Telas/relatorios utilizados
	Sissm003A sissm003A;
	Sisthm01 sisthm01;
	// Includes utilizados
	Sislm001 sislm001 = new Sislm001();
	// Areas globais / session
	Sisgsisp sisgsisp;
	// Funcoes/subrotinas
	FuncoesGerais funcoes = new FuncoesGerais();

	Result result;
	Sessao sessao;
	Boolean primeiraVez = false;
	Sissm003 sissm003Anterior;
	String faseproc = "0";
	// Par�metros
	public String voltar = "";
	public String mdfuo1 = "";
	public int z = 0;
	public int modulo = 0;
	private String mdfuo2 = "";
	private int c = 0;
	private String[] nomeClasse = new String[41];
	private String titulo = "";

	private Sisthm01 preMapas() {
		sissm003A = new Sissm003A(true, sessao);
		sisthm01 = new Sisthm01(true, sessao);
		Arrays.fill(nomeClasse, "");
		return sisthm01;
	}

	public Sissm003(Result result, Sessao sessao) {
		this.result = result;
		this.sessao = sessao;
	}

	@Post
	public void executar(Sissm003A sissm003A, Sisthm01 sisthm01) {
		try {
			main(sissm003A, sisthm01);
		} catch (Exception e) {
			throw new ExceptionProgram(e, sessao, this.getClass().getSimpleName());
		}
	}

	private void main(Sissm003A psissm003A, Sisthm01 psisthm01) {
		if (psisthm01 == null && psissm003A == null) {
			primeiraVez = true;
			// sisthm01 = new Sisthm01 (primeiraVez);
			sisthm01 = preMapas();
			sisthm01.setNavegar("../sissm003/executar");
			sissm003();
			sessao.setAtributo("SISSM003", this);
		} else {
			restaurarEstados(psissm003A, psisthm01);

			if (psissm003A != null) {
				sissm003A.receberTela(false, result);
				if (!(sisthm01.getOperacao().equals("CAD") || sisthm01.getOperacao().equals("SIS") || sisthm01.getOperacao().equals("FIM")) && !UtilBean.funcao.equals(UtilBean.ctt_retorna)) {
					sissm003A.enviarMensagem(null, "");
					sessao.setAtributo("SISSM003", this);
					result.include("sissm003A", sissm003A);
					return;
				}
			} else {
				sisthm01.receberTela(false, result);
				if (UtilBean.funcao.equals(UtilBean.ctt_retorna)) {
					funcoes.retornarModulo(result, sessao);
					return;
				}
				// Par�grafo: f1()
				for (sislm001.l = 1; sislm001.l <= 9; sislm001.l++) {
					for (c = 1; c <= 3; c++) {
						if (sisthm01.getOp0(c, sislm001.l).trim().equals(sisthm01.getOperacao())) {
							break;
						}
					}
				}
				if (sisthm01.getOperacao().trim().equals("") && !UtilBean.funcao.equals(UtilBean.ctt_retorna)) {
					sisthm01.enviarMensagem("operacao", "Informe a opera��o!");
					sissm003();
					return;
				}
				// if (sislm001.l > 9) {
				// sisthm01.enviarMensagem("operacao", "");
				// sissm003();
				// return;
				// }
			}
		}
		sessao.setAtributo("SISSM003", this);
		result.include("sisthm01", sisthm01);
		sisthm01.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
	}

	private void sissm003() {
		c = 0;
		z = 1;
		mdfuo2 = mdfuo1;
		mdfuo2 = UtilBean.moveSubstring(mdfuo2, 0, 3, "A", "ZZZ");
		sislm001.l = 1;
		switch (modulo) {
		case 2: {
			sisthm01.setTitulo(" VEICULOS     ");
			break;
		}
		case 3: {
			sisthm01.setTitulo(" CONDUTORES ");
			break;
		}
		case 4: {
			sisthm01.setTitulo(" MULTAS    ");
			break;
		}
		case 7: {
			sisthm01.setTitulo(" ROUBO/FURTO ");
			break;
		}
		case 13: {
			sisthm01.setTitulo(" ID. CIVIL   ");
			break;
		}
		default: {
			break;
		}
		}

		if (UtilBean.subStr(mdfuo1, 2, 1).equals("S")) {
			sessao.setAtributo("SISSM003", this);
			result.include("sissm003A", sissm003A);
			sissm003A.enviarTela(false, result, getClass().getSimpleName().toUpperCase());
			return;
		} else {

			while (vwDveope.leituraOperacao()) {
				// READADA
				if (!(vwDveope.getModulo() == modulo)) {
					continue;
				}
				if (vwDveope.getModdis(sessao.getSisgsisp().getVlt() - 1) == sessao.getSisgsisp().getVlt()) {
					c += 1;
					if (c > 3) {
						c = 1;
						z += 1;
					}
					sisthm01.setOp0(c, z, vwDveope.getOperacao());
					sisthm01.setDe0(c, z, vwDveope.getDescricao());
				}
			}

			if (modulo == 2 && (Integer.parseInt(UtilBean.subStr(mdfuo1, 0, 2)) == 9 || Integer.parseInt(UtilBean.subStr(mdfuo1, 0, 2)) == 16)) {
				c += 1;
				if (c > 3) {
					c = 1;
					z += 1;
				}

				sisthm01.setOp0(c, z, "ATS");
				sisthm01.setOp0(c, z, "TABELA SENHA");
			}

			sessao.setAtributo("SISSM003", this);
			result.include("sisthm01", sisthm01);
			sisthm01.enviarTela(false, result, getClass().getSimpleName().toUpperCase());
			return;
		}
	}

	private void restaurarEstados(Sissm003A psissm003A, Sisthm01 psisthm01) {
		this.sissm003Anterior = (Sissm003) sessao.getAtributo("SISSM003");
		if (psissm003A != null) {
			sissm003A = psissm003A;
		} else {
			sissm003A = this.sissm003Anterior.sissm003A;
		}
		sissm003A.setSessao(sessao);
		if (psisthm01 != null) {
			sisthm01 = psisthm01;
			sisthm01.setOp0(this.sissm003Anterior.sisthm01.getOp0());
			sisthm01.setDe0(this.sissm003Anterior.sisthm01.getDe0());
		} else {
			sisthm01 = this.sissm003Anterior.sisthm01;
		}
		sisthm01.setSessao(sessao);
		this.faseproc = this.sissm003Anterior.faseproc;
		this.voltar = this.sissm003Anterior.voltar;
		this.sisthm01.setTitulo(this.sissm003Anterior.sisthm01.getTitulo());
	}
}
